//
// Created by 33145 on 2023/4/18.
//

#ifndef SYLAR_MYSQL_CONNECTION_H
#define SYLAR_MYSQL_CONNECTION_H

#include <mysql/mysql.h>
#include <list>
#include <string>
#include <memory>

#include "sylar/log.h"

namespace sylar {
  namespace sql {
    class MySQL {
    public:
      typedef std::shared_ptr<MySQL> ptr;

      MySQL(const std::string& user, const std::string& passWd , const std::string& databaseName = "Login",
            const std::string& url = "127.0.0.1", const std::string& port = "3306");
      bool connect();
      bool ping();
      bool hasError() { return m_haserror; }
      int execute(const std::string& sql);
      std::shared_ptr<MYSQL> getMySQL();
      static MYSQL_RES* my_mysql_query(MySQL::ptr mysql, const char* sql);

    private:
      std::shared_ptr<MYSQL> m_mysql;
      bool m_haserror{false};
    private:
      std::string m_url;			    //主机地址
      std::string m_port;		      //数据库端口号
      std::string m_user;		      //登陆数据库用户名
      std::string m_passWord;	    //登陆数据库密码
      std::string m_databaseName; //使用数据库名
    };
  }
}

#endif //SYLAR_MYSQL_CONNECTION_H
